use crate::encrypt_tool::{EncrtptTool, KeyHelper, ConsultTool, HKDFHelper};

mod encrypt_tool;

fn init_user(user : & mut EncrtptTool)
{
    // 生成ik 身份密钥
    let ikkeypair = user.gen_key_pair();
    // 生成spk 签名密钥
    let spkkeypair = user.gen_key_pair();
    println!("prikey : {:?} , pubkey :{:?}" , ikkeypair.pri_key ,ikkeypair.pub_key);
    // 导入密钥初始化用户
    user.init_user(ikkeypair, spkkeypair );
    //生成 10 组 opk 即可
    user.gen_opk(10);
    // let _ = keypair;

}

fn main() {

    //　创建　两个用户
    let mut user1 = EncrtptTool::new();
    let mut user2 = EncrtptTool::new();

    //　数据设置用户的id
    user1.setUid(1);
    user2.setUid(2);
    //　初始化用户信息
    init_user(&mut user1);
    init_user(&mut user2);

    // 用户发出一个协商包，
    //TODO 接入服务端的流程后则将这个包由服务端保留

    println!("=========user1 export : UserPackage start =========");
    let package = user1.pop_user_package();
    println!("package : {:?} " , package);
    println!("=========user1 export : UserPackage end   =========");

    //　对应流程是　用户2 从服务端获取用户１ 的 密钥包, 本地进行协商出　４组 DH　，并将 协商后的 临时信息传输给用户１
    println!("=========user2 consult UserPackage start ==========");
    let consult = user2.build_consult_message(package);
    println!("consult : {:?} " ,consult);
    println!("=========user2 consult UserPackage  end  ==========");

    //　用户１　收到协商临时信息本地计算出　与用户２ 相同的　４组DH
    println!("=========user1 analyze_consult start   ============");
    user1.analyze_consult_message(consult);
    println!("=========user1 analyze_consult end     ============");

}
